package br.com.vpsa.previdordevendas.controller;

import java.math.BigDecimal;
import java.util.List;
import java.util.Map;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

import br.com.vpsa.previdordevendas.model.pojo.Tendencia;
import br.com.vpsa.previdordevendas.model.service.ConsolidadorPedidosService;
import br.com.vpsa.previdordevendas.model.service.EntidadeService;
import br.com.vpsa.previdordevendas.model.service.FaturamentoMensalService;
import br.com.vpsa.previdordevendas.model.service.PrevisaoManualService;
import br.com.vpsa.previdordevendas.model.service.TendenciaService;
import br.com.vpsa.previdordevendas.model.util.BaseUtil;
import br.com.vpsa.previdordevendas.model.util.CalendarUtils;
import br.com.vpsa.previdordevendas.model.util.JsonUtils;

@Controller
@RequestMapping("/analise")
public class AnaliseController 
{
	@Autowired
	private FaturamentoMensalService faturamentoMensalService;
	
	@Autowired
	private TendenciaService tendenciaService;
	
	@Autowired
	private EntidadeService entidadeService;
	
	@Autowired
	private PrevisaoManualService previsaoManualService;

	@Autowired
	private ConsolidadorPedidosService consolidadorPedidosService; 
	
	@RequestMapping(method = RequestMethod.GET)
    public String index(Map<String, Object> map) 
	{
		return get( CalendarUtils.getAnoAtual() , entidadeService.getIdEntidadePadrao(BaseUtil.getBase()) , map);
	}

	@RequestMapping(value="/{ano}" ,method = RequestMethod.GET)
    public String get(@PathVariable int ano, Map<String, Object> map) 
	{
		return get(ano, entidadeService.getIdEntidadePadrao(BaseUtil.getBase()), map);
	}
	
	@RequestMapping(value="/{ano}/{idEntidade}" ,method = RequestMethod.GET)
    public String get(@PathVariable int ano, @PathVariable Long idEntidade, Map<String, Object> map) 
	{
		String base = BaseUtil.getBase();
		
		if( ! consolidadorPedidosService.verificarConsolidacao(base) ){
			return "redirect:consolidador/analise";
		}
		
		List<BigDecimal> faturamentoReal = faturamentoMensalService.listarFaturamento( base , idEntidade, ano);
		Tendencia tendencia = tendenciaService.gerarTendencia(base, idEntidade, ano);
		List<BigDecimal> previsaoManual = previsaoManualService.listarPrevisaoManual(base, idEntidade, ano);
		
		map.put("entidadeSelected", entidadeService.carregarPorId(idEntidade) );
		map.put("entidades", entidadeService.listarTodas()); 
		map.put("anoAtual", ano);
		map.put("faturamentoReal", JsonUtils.getJson(faturamentoReal) );
		map.put("tendenciaDeFaturamento", JsonUtils.getJson(tendencia.getFaturamento()) );
		map.put("tendenciaDeAmeaca", JsonUtils.getJson(tendencia.getAmeacasTratadas()) );
		map.put("tendenciaDeInvestimento", JsonUtils.getJson(tendencia.getInvestimentosTratados()) );
		
		map.put("previsaoManual", JsonUtils.getJson(previsaoManual) );
		
        return "analise";
    }

	
}
